#pragma once

#include <iostream>

namespace ys
{
	template<class T>
	class myunique_ptr
	{
	private:
		// 管理的内存
		T* _ptr;

		// 禁用拷贝构造与赋值重载
		myunique_ptr(const myunique_ptr&) = delete;
		myunique_ptr& operator=(const myunique_ptr&) = delete;
	public:
		// 构造函数
		myunique_ptr(T* ptr = nullptr)
			:_ptr(ptr)
		{}

		// 移动构造
		myunique_ptr(myunique_ptr&& other_ptr)
			: _ptr(other_ptr._ptr)
		{
			other_ptr._ptr = nullptr;
		}

		// 移动赋值
		myunique_ptr& operator=(myunique_ptr&& other_ptr)
		{
			// 判断是否是自己给自己赋值
			if (this != &other_ptr)
			{
				delete _ptr;
				_ptr = other_ptr._ptr;	
				other_ptr._ptr = nullptr;
			}
			return *this;
		}
	};
}